package scales.utils import scalaz.Equal /** * Provides evidence that two instances of two disctinct types are equivalent after a conversion. * Requires an instance of Equal for the common convertable type. * * @author Derek Williams */ class Equiv[A : Equal] { def apply[ B <% A, C <% A]( b : B , c : C) : Boolean = implicitly[Equal[A]].equal(b:A, c:A) } trait EquivFunctions { /** * Are these two parameters (convertable to a C) equal for a given Equiv[C] instance */ def equivalent[A, B, C]( a : A, b : B)(implicit equiv: Equiv[C], viewA: A => C, viewB: B => C) = equiv(a, b) }